package it.csi.finregio.finreges.presentation.action.mantab;

import it.crp.crparch.web.struts.action.ActionContainer;
import it.crp.crparch.web.struts.action.CRPActionHelper;
import it.crp.crparch.web.struts.action.MethodNameAction;
import it.crp.crparch.web.struts.service.WebServiceException;
import it.csi.finregio.finreges.dto.Classificazione;
import it.csi.finregio.finreges.presentation.action.FinregioActionHelper;
import it.csi.finregio.finreges.presentation.form.SchedaForm;

import java.util.ResourceBundle;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class ManutenzioneTabelleAction extends MethodNameAction {

	private transient ResourceBundle messages=ResourceBundle.getBundle("messages");

	public ActionForward nuovaClassificazione(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		return gestioneClassificazione(mapping, form, request);
	}


	public ActionForward modificaClassificazione(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		SchedaForm sf = (SchedaForm) form;
		sf.setClassificazione(request.getParameter("classificazione"));
		return gestioneClassificazione(mapping, sf, request);
	}
	
	public ActionForward eliminaClassificazione(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		SchedaForm cf = (SchedaForm) form;
		cf.setClassificazione(request.getParameter("classificazione"));
		return gestioneClassificazione(mapping, cf, request);
	}
	
	public ActionForward inserisciSottoClassificazione(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		SchedaForm sf = (SchedaForm) form;
		sf.setClassificazione(request.getParameter("_classificazione"));
		ActionContainer ac = doAction(mapping, form, request);
		if(ac.getResult()==ActionContainer.OK){
			FinregioActionHelper.putDataSavedMessage(request);
			FinregioActionHelper.getSession(request).removeAttribute("sottoclassificazioni");
		}else{
			request.setAttribute("ERROR_INSERT_SOTTOCLASSIFICAZIONE", "");
		}
		sf.setClassificazione("-1");
		sf.setDescrizioneSottoClassificazione("");
		FinregioActionHelper.putForm(request, mapping, sf);
		return ac.getForward();
	}

	public ActionForward modificaSottoClassificazione(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		SchedaForm sf = (SchedaForm) form;
		sf.setClassificazione(request.getParameter("_classificazione"));
		sf.setSottoClassificazione(request.getParameter("sottoclassificazione"));
		ActionContainer ac = doAction(mapping, form, request);
		if(ac.getResult()==ActionContainer.OK){
			FinregioActionHelper.putDataSavedMessage(request);
			FinregioActionHelper.getSession(request).removeAttribute("sottoclassificazioni");
		}else{
			request.setAttribute("ERROR_INSERT_SOTTOCLASSIFICAZIONE", "");
		}
		sf.setClassificazione("-1");
		sf.setDescrizioneSottoClassificazione("");
		sf.setSottoClassificazione("-1");
		FinregioActionHelper.putForm(request, mapping, sf);
		return ac.getForward();
	}

	public ActionForward eliminaSottoClassificazione(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		SchedaForm sf = FinregioActionHelper.getSchedaForm(form);
		sf.setSottoClassificazione(request.getParameter("sottoclassificazione"));
		ActionContainer ac = doAction(mapping, form, request);
		if(ac.getResult()==ActionContainer.OK){
			FinregioActionHelper.getSession(request).removeAttribute("sottoclassificazioni");
			FinregioActionHelper.putDataDeletedMessage(request);
			sf.setClassificazione("-1");
			sf.setSottoClassificazione("-1");
			sf.setDescrizioneSottoClassificazione("");
			FinregioActionHelper.putForm(request, mapping, form);
		}
		return mapping.findForward("success");
	}


	public ActionForward inserisciAssessorato(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws WebServiceException {
		SchedaForm sf = FinregioActionHelper.getSchedaForm(form);
		sf.setIdEnte(request.getParameter("assessorato"));
		sf.setRequest(request);
		ActionContainer ac = doAction(mapping, form, request);
		if(ac.getResult()==ActionContainer.OK){
			sf.setIdEnte("-1");
			sf.setDescrizioneAssessorato("");
			FinregioActionHelper.putForm(request, mapping, sf);
			FinregioActionHelper.getSession(request).removeAttribute("listaAssessorati");
			FinregioActionHelper.getSession(request).removeAttribute("listaAltriEnti");
			FinregioActionHelper.loadListaAltriEnti(request, form);
			FinregioActionHelper.loadListaAssessorati(request, form);
			FinregioActionHelper.putDataSavedMessage(request);
		}else{
			request.setAttribute("ERROR_INSERT_ASSESSORATO", "");
		}
		return ac.getForward();
	}
	
	public ActionForward modificaAssessorato(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws WebServiceException {
		SchedaForm sf = FinregioActionHelper.getSchedaForm(form);
		sf.setIdEnte(request.getParameter("assessorato"));
		ActionContainer ac = doAction(mapping, form, request);
		if(ac.getResult()==ActionContainer.OK){
			sf.setIdEnte("-1");
			sf.setDescrizioneAssessorato("");
			FinregioActionHelper.putForm(request, mapping, sf);
			FinregioActionHelper.getSession(request).removeAttribute("listaAssessorati");
			FinregioActionHelper.getSession(request).removeAttribute("listaAltriEnti");
			FinregioActionHelper.loadListaAssessorati(request, form);
			FinregioActionHelper.loadListaAltriEnti(request, form);
			FinregioActionHelper.putDataSavedMessage(request);
		}else{
			request.setAttribute("ERROR_INSERT_ASSESSORATO", "");
		}
		return ac.getForward();
	}
	
	
	public ActionForward eliminaAssessorato(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws WebServiceException {
		SchedaForm sf = FinregioActionHelper.getSchedaForm(form);
		sf.setIdEnte(request.getParameter("assessorato"));
		ActionContainer ac = doAction(mapping, form, request);
		if(ac.getResult()==ActionContainer.OK){
			sf.setIdEnte("-1");
			sf.setDescrizioneAssessorato("");
			FinregioActionHelper.putForm(request, mapping, sf);
			FinregioActionHelper.getSession(request).removeAttribute("listaAssessorati");
			FinregioActionHelper.getSession(request).removeAttribute("listaAltriEnti");
			FinregioActionHelper.loadListaAssessorati(request, form);
			FinregioActionHelper.loadListaAltriEnti(request, form);
			FinregioActionHelper.putDataDeletedMessage(request);
		}
		return ac.getForward();
	}
	
	public ActionForward inserisciAltroEnte(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws WebServiceException {
		return inserisciAssessorato(mapping, form, request, response);
	}
	
	public ActionForward modificaAltroEnte(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws WebServiceException {
		return modificaAssessorato(mapping, form, request, response);
	}
	
	public ActionForward eliminaAltroEnte(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws WebServiceException {
		return eliminaAssessorato(mapping, form, request, response);
	}

	public ActionForward inserisciDirezione(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws WebServiceException {
		SchedaForm sf = FinregioActionHelper.getSchedaForm(form);
		sf.setIdEnte(request.getParameter("idAssessorato"));
		
		ActionContainer ac = doAction(mapping, form, request);
		if(ac.getResult()==ActionContainer.OK){
			FinregioActionHelper.loadListaAssessorati(request, form);
			FinregioActionHelper.loadListaDirezioniByEnte(request, form);
			FinregioActionHelper.putDataSavedMessage(request);
			sf.setIdEnte("-1");
			sf.setProgressivoDirezione("-1");
			FinregioActionHelper.putForm(request, mapping, form);

		}else{
			request.setAttribute("ERROR_INSERT_DIREZIONE", "");
		}
		return ac.getForward();
	}

	public ActionForward eliminaDirezione(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws WebServiceException {
		SchedaForm sf = FinregioActionHelper.getSchedaForm(form);
		sf.setProgressivoDirezione(request.getParameter("direzione"));
		ActionContainer ac = doAction(mapping, form, request);
		if(ac.getResult()==ActionContainer.OK){
			FinregioActionHelper.loadListaAssessorati(request, form);
			FinregioActionHelper.loadListaDirezioniByEnte(request, form);
			FinregioActionHelper.putDataDeletedMessage(request);
			sf.setIdEnte("-1");
			sf.setProgressivoDirezione("-1");
			FinregioActionHelper.putForm(request, mapping, form);

		}
		return ac.getForward();
	}
	
	public ActionForward modificaDirezione(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws WebServiceException {
		SchedaForm sf = FinregioActionHelper.getSchedaForm(form);
		sf.setIdEnte(request.getParameter("_assessorato"));
		sf.setProgressivoDirezione(request.getParameter("direzione"));
		ActionContainer ac = doAction(mapping, form, request);
		if(ac.getResult()==ActionContainer.OK){
			FinregioActionHelper.loadListaAssessorati(request, form);
			FinregioActionHelper.loadListaDirezioniByEnte(request, form);
			FinregioActionHelper.putDataSavedMessage(request);
			sf.setIdEnte("-1");
			sf.setProgressivoDirezione("-1");
			FinregioActionHelper.putForm(request, mapping, form);
		}else{
			request.setAttribute("ERROR_INSERT_DIREZIONE", "");
		}
		return ac.getForward();
	}
	
	
	public ActionForward inserisciSettore(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws WebServiceException {
		SchedaForm sf = FinregioActionHelper.getSchedaForm(form);
		sf.setIdEnte(request.getParameter("idAssessorato"));
		sf.setProgressivoDirezione(request.getParameter("idDirezione"));
		ActionContainer ac = doAction(mapping, form, request);
		if(ac.getResult()==ActionContainer.OK){
			FinregioActionHelper.loadListaAssessorati(request, form);
			FinregioActionHelper.loadListaDirezioniByEnte(request, form);
			FinregioActionHelper.putDataSavedMessage(request);
			sf.setIdEnte("-1");
			sf.setProgressivoDirezione("-1");
			sf.setProgressivoSettore("-1");
			FinregioActionHelper.putForm(request, mapping, form);
		}else{
			request.setAttribute("ERROR_INSERT_SETTORE", "");
		}
		
		return ac.getForward();
	}
	
	
	public ActionForward modificaSettore(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws WebServiceException {
		SchedaForm sf = (SchedaForm) form;
		sf.setProgressivoDirezione(request.getParameter("idDirezione"));
		sf.setIdEnte(request.getParameter("idAssessorato"));
		sf.setProgressivoSettore(request.getParameter("idSettore"));
		ActionContainer ac = doAction(mapping, form, request);
		if(ac.getResult()==ActionContainer.OK){
			FinregioActionHelper.loadListaAssessorati(request, form);
			FinregioActionHelper.loadListaDirezioniByEnte(request, form);
			FinregioActionHelper.putDataSavedMessage(request);
			sf.setIdEnte("-1");
			sf.setProgressivoDirezione("-1");
			sf.setProgressivoSettore("-1");
			FinregioActionHelper.putForm(request, mapping, form);
		}
		return ac.getForward();
		
	}
	
	
	public ActionForward eliminaSettore(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws WebServiceException {
		SchedaForm sf = FinregioActionHelper.getSchedaForm(form);
		sf.setProgressivoSettore(request.getParameter("settore"));
		ActionContainer ac = doAction(mapping, form, request);
		if(ac.getResult()==ActionContainer.OK){
			FinregioActionHelper.loadListaAssessorati(request, form);
			FinregioActionHelper.loadListaDirezioniByEnte(request, form);
			FinregioActionHelper.putDataDeletedMessage(request);
			sf.setIdEnte("-1");
			sf.setProgressivoDirezione("-1");
			sf.setProgressivoSettore("-1");
			FinregioActionHelper.putForm(request, mapping, form);
		}else{
			request.setAttribute("ERROR_INSERT_RIFERIMENTO", "");
		}
		return ac.getForward();
	}
	
	
	public ActionForward inserisciTipoRiferimento(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws WebServiceException {
		SchedaForm sf = FinregioActionHelper.getSchedaForm(form);
		ActionContainer ac = doAction(mapping, form, request);
		if(ActionContainer.OK==ac.getResult()){
			FinregioActionHelper.getSession(request).removeAttribute("listaRiferimenti");
			FinregioActionHelper.loadListaTipoRiferimento(request, form);
			sf.setTipoRiferimento("-1");
			FinregioActionHelper.putDataSavedMessage(request);
			FinregioActionHelper.putForm(request, mapping, form);
		}
		return ac.getForward();
	}
	
	public ActionForward modificaTipoRiferimento(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws WebServiceException {
		SchedaForm sf = FinregioActionHelper.getSchedaForm(form);
		String tiporif = request.getParameter("tipoRiferimento");
		String abbreviazione = "";
		if(!tiporif.equals("-1")){
			tiporif = tiporif.substring(0,tiporif.indexOf("$"));
		}
		sf.setTipoRiferimento(tiporif);
		ActionContainer ac = doAction(mapping, form, request);
		if(ActionContainer.OK==ac.getResult()){
			FinregioActionHelper.getSession(request).removeAttribute("listaRiferimenti");
			sf.setTipoRiferimento("-1");
			FinregioActionHelper.loadListaTipoRiferimento(request, form);
			FinregioActionHelper.putDataSavedMessage(request);
			FinregioActionHelper.putForm(request, mapping, form);
		}
		return ac.getForward();
	}
	
	/**
	 * @param mapping
	 * @param form
	 * @param request
	 * @return
	 */
	private ActionContainer doAction(ActionMapping mapping, ActionForm form,
			HttpServletRequest request) {
		ActionContainer ac = CRPActionHelper.doAction(this, mapping, form, request);
		return ac;
	}
	
	/**
	 * @param mapping
	 * @param form
	 * @param request
	 * @return
	 * @throws WebServiceException
	 */
	private ActionForward gestioneClassificazione(ActionMapping mapping,
			ActionForm form, HttpServletRequest request)
			throws WebServiceException {
		ActionContainer ac = doAction(mapping, form, request);
		if(ac.getResult()==ActionContainer.OK){
			FinregioActionHelper.getSession(request).removeAttribute("listaClassificazioni");
			FinregioActionHelper.loadListaClassificazioni(request, form);
			FinregioActionHelper.putDataSavedMessage(request);

		}else{
			request.setAttribute("ERROR_INSERT_CLASSIFICAZIONE", "");
		}
		return ac.getForward();
	}
	 
}
